#include <iostream>
#include <string>

using namespace std;

// 成员子类
class stu1
{
private:
    /* data */
public:
    // 无参构造
    stu1(/* args */)
    {
        cout << "无参构造" << endl;
    }

    // 有参构造
    stu1(int val)
    {
        cout << "有参构造 val = " << val << endl;
    }
};

/*
使用初始化列表的条件 
    1、成员变量与构造函数实参重名
    2、成员变量中有const 
    3、成员变量中有 &
    4、有成员子类 并且需要调用成员子类的 有参构造
*/
class stu2
{
private:
    // 成员变量
    string & name;
    const int id;

    // 成员子类
    stu1 stu;
public:
    // 有参
    stu2(string name , int id)
        : name(name) , id(id) , stu(10)
    {

    }

};




int main(int argc, char const *argv[])
{
    string str;
    stu2 s1(str , 10);
    
    return 0;
}
